CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わる理由を教えてください
困っていた内容
CloudFormation の YAML テンプレートで、特定のタグを付与したリソースを作成しました。
yes
というタグの値を付与したリソースのタグを確認すると、true
に自動的に変わっていました。
CloudFormation の YAML テンプレートで特定のタグの値が true
または false
に自動的に変わる理由を教えてください。
どう対応すればいいの?
CloudFormation の YAML テンプレートで特定のタグの値が true
または false
に自動的に変わるのは、YAML バージョン 1.1 の仕様です。
A Boolean represents a true/false value. Booleans are formatted as English words (“true”/“false”, “yes”/“no” or “on”/“off”) for readability and may be abbreviated as a single character “y”/“n” or “Y”/“N”.
CloudFormation は、いくつかの例外を除き、YAML バージョン 1.1 の仕様をサポートしているため、CloudFormation で YAML テンプレートを使用すると、以下の値が true
または false
に自動的に変わります。
・yes / no
・on / off
AWS CloudFormation は、いくつかの例外を除き、YAML バージョン 1.1 の仕様をサポートしています。
回避策として、以下の方法があります。
・値をダブルクォーテーションで囲む
"yes"
, "off"
, "on"
, "off"
など
・JSON テンプレートを使用する
やってみた
実際に以下の 3 つのパターンを試してみました。
・YAML テンプレートでダブルクォーテーションを使用せずに yes
という値をタグに設定
・YAML テンプレートでダブルクォーテーションを使用して "yes"
という値をタグに設定
・JSON テンプレートで "yes"
という値をタグに設定
YAML テンプレートでダブルクォーテーションを使用せずに yes という値をタグに設定
以下の YAML テンプレートを使用して、VPC を作成します。
AWSTemplateFormatVersion: "2010-09-09" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Tags: - Key: Name Value: yes
CloudFormation で上記テンプレートでスタックを作成し、VPC コンソールで Name
タグの値を確認すると、true
に変わっていました。
YAML テンプレートでダブルクォーテーションを使用して "yes" という値をタグに設定
先ほどの YAML テンプレートの値をダブルクォーテーションで囲みます。
AWSTemplateFormatVersion: "2010-09-09" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Tags: - Key: Name Value: "yes"
上記テンプレートで CloudFormation スタックを更新し、VPC の Name
タグの値を確認すると、yes
に変わっており、テンプレート通りの値となりました。
JSON テンプレートで "yes" という値をタグに設定
今度は JSON テンプレートで試してみます。
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "VPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16", "Tags": [ { "Key": "Name", "Value": "yes" } ] } } } }
CloudFormation で上記テンプレートでスタックを作成し、VPC コンソールで Name
タグの値を確認すると、テンプレート通りに yes
の値となりました。